package TDA;

/**
 * 	Grafo No Dirigido
 */
public interface GrafoTDA<E> {

			/**
			 * Permite inicializar la estructura para poder comenzar a 
			 * utilizarla
			 */
		   void InicializarGrafo();
		   
		   /**
		    * PRECONDICION: grafo Inicializado	   
		    */
		   ConjuntoTDA<E> Vertices();

		   /**
		    * PRECONDICION: grafo Inicializado, y el vertice no debe existir	   
		    */
		   void AgregarVertice(E vertice);

		   /**
		    * PRECONDICION: grafo Inicializado, [Vertice1] y [Vertice2] existentes. [Costo] mayor igual a 0. Arista no existente.
		    */
		   void AgregarArista(E vertice1,E vertice2, int costo);

		   /**
		    * PRECONDICION: grafo Inicializado, Vertices del grafo No Vacio	   
		    */
		   E Elegir(); 

		   /**
		    * PRECONDICION: grafo Inicializado, [Vertice1] y [Vertice2] existentes.
		    */
		   boolean ExisteArista(E vertice1, E vertice2);
		   
		   /**
		    * PRECONDICION: grafo Inicializado, [Vertice1] y [Vertice2] existentes. Arista existente.	   
		    */
		   int PesoArista(E vertice1, E vertice2);
		   
		   /**
		    * PRECONDICION: grafo Inicializado, [vertice] existente.
		    */
		   void EliminarVertice(E vertice);
		   
		   /**
		    * PRECONDICION: grafo Inicializado, [Vertice1] y [Vertice2] existentes. Arista Existente.
		    */
		   void EliminarArista(E vertice1, E vertice2);
		   
		   /**
		    * PRECONDICION: grafo Inicializado, [vertice] existente.
		    */
		   ConjuntoTDA<E> Adyacentes(E vertice);
	
}
